/** * Copyright (c) 2016-2019 人人开源 All rights reserved. */

package com.joinval.modules.sys.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.joinval.common.utils.PageUtils;
import com.joinval.common.utils.Result;
import com.joinval.modules.sys.entity.SysUserEntity;
import com.joinval.modules.sys.enums.AuditStatusEnums;
import com.joinval.modules.sys.enums.UserStatusEnums;
import com.joinval.modules.sys.enums.UserTypeEnums;
import com.joinval.modules.sys.form.BaseWxLoginForm;
import com.joinval.modules.sys.form.SysUserInfoForm;
import com.joinval.modules.sys.vo.StampVO;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
import java.util.Set;


/**
 * 系统用户
 *
 * @author Mark sunlightcs@gmail.com
 */
public interface SysUserService extends IService<SysUserEntity> {

	PageUtils queryPage(Map<String, Object> params);

	/**
	 * 查询用户的所有权限
	 * @param userId  用户ID
	 */
	List<String> myPerms(Long userId);


	/**
	 * 根据用户名，查询系统用户
	 */
	SysUserEntity queryByUserName(String username);

	/**
	 * 保存用户
	 */
	void saveUser(SysUserEntity user);

	/**
	 * 后台更新用户信息
	 */
	void update(SysUserEntity user);

	/**
	 * 用户更新个人信息
	 * @param user
	 */
	void updateOwnInfo(SysUserEntity user);

	/**
	 * 删除用户
	 */
	void deleteBatch(Long[] userIds);

	/**
	 * 修改密码
	 * @param userId       用户ID
	 * @param password     原密码
	 * @param newPassword  新密码
	 */
	boolean updatePassword(Long userId, String password, String newPassword);


	/**
	 * 微信登陸
	 * @param baseWxLoginForm
	 * @return
	 */
	Map<String, Object> wxLogin(BaseWxLoginForm baseWxLoginForm);


	/**
	 * 生成动态二维码
	 * @param userId
	 * @param response
	 */
	void dynamicQRCode(Long userId,HttpServletResponse response);

	/**
	 * 用户下拉菜单
	 * @param userType
	 * @param auditStatus
	 * @return
	 */
	PageUtils menuList(Page page,
					   UserTypeEnums userType,
					   AuditStatusEnums auditStatus,
					   String orgCode,
					   String volCode,
					   String orgName,
					   String realName,
					   String mobile);

	/**
	 * 当前登录用户信息
	 * @param userId
	 */
	Map<String, Object> loginUserInfo(Long userId);

	/**
	 * 根据用户id查询
	 * @param userId
	 * @return
	 */

	List<Map<String, Object>>  getUserRolesByUserId(Long userId);

	/**
	 * 用户的角色code
	 * @param userId
	 * @return
	 */
	List<String> getUserRoleCodesByUserId(Long userId);


	/**
	 * 志愿者详情
	 * @param userId
	 * @return
	 */
	Map<String, Object> volUserInfo(Long userId);


	/**
	 * 点单机构详情
	 * @param userId
	 * @return
	 */
	Map<String, Object> volOrgInfo(Long userId);

	/**
	 * 后台用户详情
	 * @param userId
	 */
	Map<String, Object> bgUserInfo(Long userId);

	/**
	 * 用户中心个人信息
	 * @param userId
	 * @return
	 */
	Result volUserCenter(Long userId, Set<Long> teamIds,Integer leaderStatus);

	/**
	 * 点单机构列表
	 * @param page
	 * @param realName
	 * @param orgName
	 * @param orgLocation
	 * @param orgType
	 * @param mobile
	 * @return
	 */
	PageUtils orgList(Page page,AuditStatusEnums auditStatus,String orgName, String orgLocation, String orgType, String realName, String mobile);


	/**
	 * 志愿者列表
	 * @param page
	 * @param auditStatus
	 * @param minAge
	 * @param maxAge
	 * @param minServiceHour
	 * @param maxServiceHour
	 * @param volCode
	 * @param mobile
	 * @return
	 */
	PageUtils volList(Page page,AuditStatusEnums auditStatus,Integer minAge,Integer maxAge,Integer minServiceHour,Integer maxServiceHour, String volCode,String realName ,String mobile);

	/**
	 * 后台用户列表
	 * @param page
	 * @param userStatus
	 * @param gender
	 * @param idCard
	 * @param username
	 * @param mobile
	 * @return
	 */
	PageUtils list(Page page,UserStatusEnums userStatus,Integer gender,String idCard,String username ,String realName,String mobile,
				   Long countryId,Long townId,Long roleId);

	/**
	 *
	 * @param page
	 * @param userStatus
	 * @param gender
	 * @param idCard
	 * @param username
	 * @param realName
	 * @param mobile
	 * @param roleCode
	 * @param countyId
     * @param townId
     * @return
	 */
	PageUtils getUserListPageByRoleCode(Page page, UserStatusEnums userStatus
			, Integer gender, String idCard, String username, String realName
			, String mobile
			, String roleCode
			, Long countyId
			, Long townId
			, List<Long> townIdList
	);

	/**
	 * 机构信息修改
	 */
	void orgUpdate(SysUserInfoForm sysUserInfoForm);

	/**
	 * 平台签章
	 * @param stampVO
	 */
	Result stamp(StampVO stampVO);

	/**
	 * 微信用户实时信息
	 * @param userId
	 * @return
	 */
	Result wxLoginUser(Long userId);

	/**
	 * 微信小程序获取用户照片
	 * @param verifyResult
	 * @return
	 */
	Result wxImage(String verifyResult);

	/**
	 * 头像上传
	 * @param userId
	 * @param logo
	 */
    void logo(Long userId, String logo);

	/**
	 * 添加用户类别
	 * @param sysUserEntity
	 */
	void addUserType(SysUserEntity sysUserEntity,UserTypeEnums userTypeEnums);

	/**
	 * 检测是否是本人
	 * @param userId
	 */
	void checkIsOneself(Long userId);
}
